/*****************************
* 以下内容为自定义函数
* @Author wangjunfu
* ****************************/

/** 返回按钮上一级 */
function gotoBack() {
    history.go(-1);
}

/** 后退并刷新当前页面 */
function gotoBackRefresh() {
    //只能后退一步
    self.location = document.referrer;
}

/** 全选/取消全 */
function checkbox_all(id, checkboxID) {
    var isChecked = $("#" + id)[0].checked;
    $("#" + checkboxID + " input:checkbox").each(function () {
        this.checked = isChecked;
        if (isChecked) {
            $(this).closest("tr").find("td").addClass("ins_mouse_color");
        } else {
            $(this).closest("tr").find("td").removeClass("ins_mouse_color");
        }
    });
}

/** 将小写字符转化成大写字符 */
function toUpCase(x) {
    var y = document.getElementById(x).value;
    document.getElementById(x).value = y.toUpperCase();
}

/** 跳转到指定URL */
function jumpTo(url) {
    window.location = url;
}

/** 鼠标经过table行颜色改变 */
jQuery(document).ready(function () {
    $('#checkbox-select').find('tr').mouseover(function () {
        $(this).find('td').addClass('ins_mouse_color');
    });

    $('#checkbox-select').find('tr').mouseout(function () {
        //如果被选中了就不取消了
        if ($(this).find("input[type='checkbox']").is(':checked') == false) {
            $(this).find('td').removeClass('ins_mouse_color');
        }
    });
});

/** 封装 jQuery ajax请求 */
window.ajax = function (pac) {
    if (!pac) return;

    var packet = {};

    if (!pac.url) {
        packet.url = '';
    } else {
        packet.url = pac.url;
    }

    if (!pac.type) {
        packet.type = 'POST';
    } else {
        packet.type = pac.type;
    }

    if (!pac.dataType) {
        packet.dataType = 'json';
    } else {
        packet.dataType = pac.dataType;
    }

    if (!pac.data) {
        packet.data = {};
    } else {
        packet.data = pac.data;
    }

    if (!pac.timeout) {
        packet.timeout = -1;
    } else {
        packet.timeout = pac.timeout;
    }

    if (pac.async == false) {
        packet.async = pac.async;
    }

    if (!pac.beforeSend) {
        packet.beforeSend = function (request) {
            request.setRequestHeader("RequestType", "AJAX");
            window.status = 'Processing...';
        };
    } else {
        packet.beforeSend = function (request) {
            request.setRequestHeader("RequestType", "AJAX");
            window.status = 'Processing...';
            pac.beforeSend(request);
        };
    }

    //showInfoAlert 依赖于/static/utils/artdialog/dialog-common.js
    if (!pac.error) {
        packet.error = function (data) {
            if (data.status == 404) {
                showInfoAlert("请求程序不存在, 请联系管理员!");
            } else if (data.status == 500) {
                showInfoAlert("程序运行错误, 请联系管理员!");
            } else if (data.status == 200) {
                showInfoAlert("请求数据格式错误, 请检查提交的数据!");
            } else {
                showInfoAlert("系统错误, 请联系管理员!");
            }

            //如果存在关闭遮罩层方法 调用方法关闭下
            if (typeof(canclemodalmethod) == "function") {
                canclemodalmethod();  //关闭遮罩层
            }
        };
    } else {
        packet.error = function (err) {
            pac.error(err);
        };
    }

    if (!pac.complete) {
        packet.complete = function () {
            window.status = '';
        };
    } else {
        packet.complete = function () {
            window.status = '';
            pac.complete();
        };
    }

    if (pac.success) {
        packet.success = function (data) {
            if (data.login_status) {
                //用户登录、权限认证状态 300用户权限认证不通过
                showInfoAlert(decodeURI(data.returnMessage));
            } else if (data.returnCode == 0) {
                //操作失败
                showInfoAlert(decodeURI(data.returnMessage));

                //如果存在关闭遮罩层方法 调用方法关闭下
                if (typeof(canclemodalmethod) == "function") {
                    //关闭遮罩层
                    canclemodalmethod();
                }
            } else if (data.returnCode == -1) {
                //系统错误
                showInfoAlert(decodeURI(data.returnMessage));

                //如果存在关闭遮罩层方法 调用方法关闭下
                if (typeof(canclemodalmethod) == "function") {
                    //关闭遮罩层
                    canclemodalmethod();
                }
            } else {
                pac.success(data);
            }
        };
    }

    $.ajax(packet);
};

/**
 * 验证JSON字符串是否正确
 * @param str
 * @returns {boolean}
 */
function isJSON(str) {
    if (typeof str == 'string') {
        try {
            var obj = JSON.parse(str);
            return typeof obj == 'object' && obj;

        } catch (e) {
            console.log('error：' + str + '!!!' + e);
            return false;
        }
    }
    console.log('It is not a string!')
}

/**
 * 汉字转拼音
 * @param chinese   汉字
 * @param type      1只转首字母（小写） 2只转首字母（小写） 3全部拼音（小写） 4全部拼音（大写）
 * @param fieldname 转完拼音要赋值的字段name名称
 */
function chineseToPingyin(chinese, type, fieldname) {
    //如果已经存在，则不覆盖
    var origin = $("input[name='" + fieldname + "']").val();
    if (origin !== ''){
        return;
    }

    $.ajax({
        url: "/public/getChinesePinying",
        type: "POST",
        data: {chinese: chinese, type: type},
        async: true,
        error: function (request) {
            showInfoAlert("服务器连接失败，请检查网络环境！", null);
        },
        success: function (data) {
            var r = eval("(" + data + ")");

            if (r.returnCode === "1") {
                $("input[name='" + fieldname + "']").val(r.pingyin);
            }
        }
    });
}

/**
 * 计算a, b 两个文本框中值的乘积，并赋值给c文本框
 * @param name_a
 * @param name_b
 * @param name_c
 */
function computeMutiTwoInput(name_a, name_b, name_c) {
    var data_a = $("input[name='" + name_a + "']").val();
    var data_b = $("input[name='" + name_b + "']").val();

    var data_c = parseFloat(data_a) * parseFloat(data_b);
    $("input[name='" + name_c + "']").val(fixTwoPoint(data_c));
}

/**
 * 计算a, b 两个文本框中值的乘积，并赋值给c文本框
 * @param name_a
 * @param name_b 注意百分比转换
 * @param name_c
 */
function computeMutiTwoNum(name_a, name_b, name_c) {
    var data_a = $("input[name='" + name_a + "']").val();
    var data_b = $("input[name='" + name_b + "']").val();

    var data_c = parseFloat(data_a) * parseFloat(data_b) / 100;
    $("input[name='" + name_c + "']").val(fixTwoPoint(data_c));
}

/** 保留两位小数 */
function fixTwoPoint(num) {
    if (isNaN(num)) {
        return 0.00;
    }
    return num.toFixed(2);
}

/** 刷新当前页 */
function refreshCurrPage() {
    window.location = $('input[name="handle_url"]').val();
}

function gotoCurrPage() {
    window.location = $('input[name="handle_url"]').val() + "&redirectUrl=" + escape(encodeURI($('input[name="redirect_url"]').val()));
}

/** 重新加载当前页面 */
function reloadCurrPage() {
    window.location.reload();
}

/** 定向跳转 */
function gotoRedirectUrl() {
    window.location = $('input[name="redirect_url"]').val();
}

/** JS实现Sleep：这种实现方式是利用一个伪死循环阻塞主线程，因为JS是单线程的。*/
function sleepDelay(delay) {
    var start = (new Date()).getTime();
    while ((new Date()).getTime() - start < delay) {
        continue;
    }
}

/** 格式化json */
function syntaxHighlight(json) {
    if (typeof json != 'string') {
        json = JSON.stringify(json, undefined, 2);
    }
    json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
    return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
        var cls = 'number';
        if (/^"/.test(match)) {
            if (/:$/.test(match)) {
                cls = 'key';
            } else {
                cls = 'string';
            }
        } else if (/true|false/.test(match)) {
            cls = 'boolean';
        } else if (/null/.test(match)) {
            cls = 'null';
        }

        if (cls === 'key') {
            match = match.replace(new RegExp("\"", "gm"), "");
            match = match.replace(new RegExp(":", "gm"), "&nbsp;:&nbsp;&nbsp;");
        }
        return '<span class="' + cls + '">' + match + '</span>';
    });
}

/** 预览PDF文件（需要部署file.domain.com站点，因为其它文件要转成PDF才可预览）*/
function previewPDF(id) {

    $("#shadowInfo").html("文档正在预览中......");
    $("#shadow-modal-nohead").modal("show");

    $.ajax({
        url: "/basic/upload/view",
        type: "POST",
        data: {
            fileId: id
        },
        dataType: 'json',
        async: false,
        error: function (request) {
            //error
        },
        success: function (data) {
            if (data.returnCode === 1) {
                // 文件读取成功，进行预览。
                if (data.type === "img" || data.type === "pdf") {
                    window.open(data.weburl);
                } else {
                    window.open(data.fileSite + "/pdf/view?fileId=" + id);
                }

            } else {
                showInfoAlert(data.returnMessage, null);
            }

            $("#shadow-modal-nohead").modal("hide");
        }
    });
}

/** 文件预览（直接浏览器打开）*/
function previewFiles(weburl) {
    window.open(weburl);
}

/**
 * 文件预览/下载（直接浏览器打开）
 * @param weburl 文件路径
 * @param servicetype 0本地存储 1腾讯云 2阿里云
 * @param viewtype 0预览 1下载
 */
function downloadFiles(weburl, servicetype, viewtype) {
    if (servicetype == 0) {
        if (viewtype == 0) {
            window.open(weburl);
        } else {
            var newurl = weburl.replace("/img?", "/download?");
            window.open(newurl);
        }
    } else {
        window.open(weburl);
    }
}

/** 全国行政区划数据（省、市、县(区)、镇(街道)、村） */
function getSubRetion(parentId, dom) {
    if (parentId === undefined || parentId <= 0) {
        return false;
    }

    $.ajax({
        url: "/basic/region/getSubRetion",
        type: "POST",
        data: {parentId: parentId},
        dataType: 'json',
        async: false,
        error: function (request) {
            showInfoAlert("服务器连接失败，请检查网络环境！", null);
        },
        success: function (data) {
            if (data.returnCode === 1) {
                var _dropdown = $("#" + dom);
                _dropdown.children("option").remove();
                _dropdown.append('<option value="0">请选择...</option>');

                var list = data.regionList;
                list.forEach(function (item) {
                    _dropdown.append("<option value='" + item.id + "'>" + item.regionName + "</option>");
                });

                $('#' + dom).selectpicker('refresh');
            }
        }
    });
}

/** 判断多选是否已经了N条记录 */
function judgeMoreRecords(name, type, num) {
    //type： 0   至少要选择num条记录
    //type： 1   至多可选择num条记录
    //type：-1   不限
    //type： 2   只能选择num条记录

    var selectids = "";
    var number = 0;

    if (name == null || name === '') {
        name = 'cccav';
    }

    $("input[name='" + name + "']:checked").each(function () {
        if ($(this).val() !== "on") {
            selectids += $(this).val() + ",";
            number++;
        }
    });

    if (type === 0 && number < num) {
        showInfoAlert("请至少选择" + num + "条记录进行操作！", null);
        return false;
    }

    if (type === 1 && number > num) {
        showInfoAlert("至多可选择" + num + "条记录进行操作！", null);
        return false;
    }

    if (type === 2 && number !== num) {
        showInfoAlert("只可选择" + num + "条记录进行操作！", null);
        return false;
    }

    return selectids;
}

/** 判断设备拉/合闸及在线状态 */
function judgeEquipmentStatus(id) {

    <!-- 遮罩层代码 -->
    $("#shadowInfo").html("设备正在检测中......");
    $("#shadow-modal-nohead").modal("show");

    $.ajax({
        url: "/iot/mqtt-publish/judgeEquipElectric",
        type: "POST",
        data: {equipId: id},
        dataType: 'json',
        async: true,
        error: function (request) {
            //error
        },
        success: function (data) {
            console.log(data);

            <!-- 遮罩层代码 -->
            $("#shadow-modal-nohead").modal("hide");

            if (data.equipId > 0) {

                //status：0离线 1在线
                if (data.status === 0) {
                    $("#status_" + data.equipId).html('<a href="javascript:void(0)"><span class="label label-table label-danger">离线</span></a>');
                } else {
                    $("#status_" + data.equipId).html('<a href="javascript:void(0)"><span class="label label-table label-success">在线</span></a>');
                }

                //power：-1离线 0分闸 1合闸
                if (data.power === -1) {
                    $("#power_" + data.equipId).html('<a href="javascript:void(0)"><span class="label label-table label-danger">离线</span></a>');
                } else if (data.power === 0) {
                    $("#power_" + data.equipId).html('<a href="javascript:void(0)"><span class="label label-table label-danger">分闸</span></a>');
                } else {
                    $("#power_" + data.equipId).html('<a href="javascript:void(0)"><span class="label label-table label-success">合闸</span></a>');
                }
            }
        }
    });
}

/**自动填充文本内容*/
function autoFillText(name, content) {
    $("input[name='" + name + "']").val(content);
}

/**复制文本*/
function copyText(content, inputElement, tips) {
    var input = document.getElementById(inputElement);
    input.value = content;  //修改文本框的内容
    input.select();         //选中文本
    document.execCommand("Copy");   //执行浏览器复制命令
    showInfoAlert(tips, null);
}

/**JS实现时间分钟加减*/
function computeTimeByMinuts(t, b) {
    var time = new Date(t);
    time.setMinutes(time.getMinutes() + b, time.getSeconds(), 0);

    var d = new Date(time);
    var y = d.getFullYear();
    var m = d.getMonth() + 1;
    m = m < 10 ? ('0' + m) : m;

    var day = d.getDate();
    day = day < 10 ? ('0' + day) : day;

    var hour = d.getHours();
    hour = hour < 10 ? ('0' + hour) : hour;

    var minute = d.getMinutes();
    minute = minute < 10 ? ('0' + minute) : minute;

    var second = d.getSeconds();
    second = second < 10 ? ('0' + second) : second;

    var resDate = y + '-' + m + '-' + day + ' ' + hour + ':' + minute + ':' + second;
    return resDate;
}


/**JS不够位数前面补0*/
function formatZero(num, len) {
    if (String(num).length > len) {
        return num;
    }
    return (Array(len).join(0) + num).slice(-len)
}